package com.boot.springbootdemo.myconfig;

import ch.qos.logback.core.db.DBHelper;
import com.boot.springbootdemo.bean.Car;
import com.boot.springbootdemo.bean.Pet;
import com.boot.springbootdemo.bean.User;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.*;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.util.UrlPathHelper;

import javax.xml.crypto.Data;

/**
 *
 * proxyBeanMethods
 *      Full(proxyBeanMethods = true)、
 *      Lite(proxyBeanMethods = false) 用于解决组件依赖 不是单例
 */
@Import({User.class, DBHelper.class}) //在组件类 上使用(用于引入组件)
@Configuration//告诉SpringBoot这是一个配置类 == 配置问价
@ImportResource("classpath:beans.xml") //引入xml配置文件中的bean
/**
 * @Component
 * @ConfigurationProperties(prefix = "mycar")  这两个注解
 */
//@EnableConfigurationProperties(Car.class)
/**
 * 相当于  另一个类 @EnableConfigurationProperties(Car.class) + @ConfigurationProperties(prefix = "mycar")
 */

/**
 * TODO implements WebMvcConfigurer  自定义矩阵变量
 */
public class MyConfig /*implements WebMvcConfigurer*/ {


    @Bean(name = "mycat") //给容器添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值，就是组件在容器中的实例
    public Pet cat(){
        return new Pet("小猫",1);
    }

    //默认单实例(注册的组件)
    @ConditionalOnBean(name = "mycat")  //TODO 和 mycat 的注入顺序也有关  必须有路径变量
    @Bean //给容器添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值，就是组件在容器中的实例
    public User user01(){
        return new User("小米",20,"男");
    }


/*    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
        UrlPathHelper urlPathHelper=new UrlPathHelper();
        //设置成不移除;后面的内容，这时矩阵变量才能生效
        urlPathHelper.setRemoveSemicolonContent(false);
        configurer.setUrlPathHelper(urlPathHelper);
    }*/
}
